<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<pre id="aa"></pre>

<div style="display:none" id="w">
    <h1>你好，hello</h1>
</div>


<script type="text/javascript">
  /*  var index=0;
    var word=document.getElementById("w").innerHTML;
    function type(){
        document.getElementById("aa").innerText = word.substring(0,index++);
    }

    setInterval(type, 100);*/
    window.onload=function(){
        // 方式1
       /* var a = 0;
        var add = function(){
            a++;
            console.log(a);
        };
        add();
        add();*/
      //方式2 ：闭包
      /*  var add = (function(){
            var  a = 0;
            return function(){
                a++;
                console.log(a);
            }
        })();
        console.log(a); //undefined
        add();
        add();*/
        /*-----------------------------另一版本-----------------------------------------------*/
        //方式1 ：apply调用模式
      /*  function add(a,b){
            return a+b;
        }
        var result=add.apply(null,[3,4]);
        document.write(result);
        function getNameAge(){
            return this.age+this.name;
        }
        var car={name:'jeep',age:'12'};
        var attr=getNameAge.apply(car);
        document.write(attr);*/
        //方式2 ：模块
         /*   var man=function(){
                var age=12;
                return {
                    getYear:function(){
                        return age;
                    },
                    setYear:function(n){
                         age=n;
                    }
                }
            };
            var pepter=man();
        document.writeln(pepter.getYear());
        pepter.setYear(20);
        document.writeln(pepter.getYear());
        document.writeln(pepter.age);*/
        //方式3 ：级联
           /* var man=function(){
                var age=12;
                return {
                    getYear:function(){
                        alert(age);
                        return this;
                    },
                    setYear:function(n){
                         age=n;
                        return this;
                    }
                }
            };
            var pepter=man();
        console.log(pepter.getYear().setYear(34).getYear().age);*/
       /* for(i=0;i<10;i++){
            setTimeout(function(){
                console.log(i);
            },1000)

        }*/

      /*  function func2(){
            var num1 = 22;
            num2 = 33;
        }
        func2();*/
        <!--console.log(num1);  会报错！-->
//        console.log(num2); <!--可以获取到num2的值，因为不使用var定义变量时，默认是全局变量 -->

       /* function func3(){
            var num3 = 44;
            function func4(){
                return num3;
            }
            return func4;
        }
        var func = func3();
        console.log(func());*/


     /*   function func3(){
            var num3=44;
            function func4(){
                return num3;
            }
            return func4();
        }
        var func=func3();
        console.log(func);
*/
/*
        function createArray() {
            var arr = new Array();
            for (var i = 0; i < 10; i++) {
                arr[i] = function (num) {
                    return function () {
                        return num;
                    }
                } (i);//调用此匿名函数返回内部匿名函数，这里多了一步按值传递参数
            }
            return arr;
        }
        var funcs = createArray();
        for (var i = 0; i < funcs.length; i++) {

            setTimeout(function(){
                console.log(funcs[i]());
            },1000)
        }*/

        function foo(start){
            i=start;
            foo=function(end){
                console.log(i++);
                debugger;
                setTimeout(function(){
                    if(i<end){
                        foo(end);
                    }
                },1000)
            };
            return foo;
        }
        foo(1)(9);





    }


</script>
</body>
</html>